/-app
/-boot
/-imports
/-storage ...
/-storage/attached ...
/-storage/attached/api
/-storage/attached/indexedDB ...
DetectStorage.ts
FileData.ts
LoadStorage.ts
MetadataData.ts
UpdateStorage.ts
functions.ts
/-storage/attached/localStorage
/-storage/attached/webSQL
/-tests
/-typings
stringUtils.ts
teapo.html
23
 
24
        var result: FileData = (<any>cursor).value;
25
        if (result && result.properties) {
26
          recipient.file(result.path, result.properties);
27
        }
28
 
29
        cursor.continue();
30
      };
31
    }
32
    
33
    migrate(
34
      editedUTC: number,
35
      filesByName: { [name: string]: { [name: string]: string; }; },
36
      callback: (error: Error, updater: attached.UpdateStorage) => void){
37
 
38
      var transaction = this._db.transaction(['files', 'metadata'], 'readwrite');
39
      transaction.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'migrate: transaction'), null);
40
      var filesStore = transaction.objectStore('files');
41
      var clearFiles = filesStore.clear(); 
42
      clearFiles.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'migrate: objectStore(files)-clear'), null);
43
      clearFiles.onsuccess = (event) => {
44
        var metadataStore = transaction.objectStore('metadata');
45
        var clearMetadata = metadataStore.clear();
46
        clearMetadata.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'migrate: objectStore(files)/clear-objectStore(metadata)-clear'), null);
47
        clearMetadata.onsuccess = (event) => {
48
          var editedUTC = Date.now();
49
          var putEditedUTC = metadataStore.put({ property: 'editedUTC', value: editedUTC });
50
          putEditedUTC.onerror = (errorEvent) => callback(
51
            wrapErrorEvent(errorEvent, 'migrate: objectStore(files)/clear-objectStore(metadata)/clear-put(' + editedUTC+')'),
52
            null);
53
          putEditedUTC.onsuccess = (event) => {
54
            var filenames: string[] = [];
55
            for (var k in filesByName) if (filesByName.hasOwnProperty(k)) { 
56
              filenames.push(k);
57
            }
58
 
59
            if (!filenames.length) {
60
              var update = new UpdateStorage(this._db);
61
              callback(null, update);
62
              return;
63
            }
64
 
65
            var completedFiles = 0;
66
            var anyError = false;
67
            filenames.forEach(file => {
68
              if (anyError) return;
69
 
70
              var fileData = { path: file, properties: filesByName[file] };
71
              var putFile = filesStore.put(fileData);
72
              putFile.onerror = (errorEvent) => {
73
                if (anyError) return;
74
                anyError = true;                
75
                callback(wrapErrorEvent(errorEvent, ''), null);
76
              }
77
              putFile.onsuccess = (event) => {
78
                completedFiles++;
79
 
80
                if (completedFiles === filenames.length) { 
81
                  var update = new UpdateStorage(this._db);
82
                  callback(null, update);
83
                }
84
              }
85
            });
86
          };
87
        };
88
      };
89
 
90
    }
91
 
92
  }
93
  
94
}